package com.pan.crawler.impl8;

import com.pan.crawler.Page;
import com.pan.entity.Chapter;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;

import java.time.Duration;
import java.util.List;

public class PageImpl8 implements Page {

    private EdgeDriver edgeDriver = new EdgeDriver();
    {
        edgeDriver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

    }

    @Override
    public String get(Chapter chapter) {
        edgeDriver.navigate().to(chapter.getUrl());

        StringBuffer sb = new StringBuffer();
        /**
         * 这时该网站的a有三种情况
         * 1.下一页
         * a不存在 id属性
         * 内容<div ... class="content-div">最后2个 p 标签是废话
         *
         * 2.下一章
         * a会存在 id=“pb_next” 属性 存在
         * 内容<div ... class="content-div">最后1个 p 标签是废话
         *
         * 3.最后一章
         * a标签什么属性都没有
         */
        while (true) {
            WebElement nextElement = edgeDriver.findElement(By.className("next"));
            WebElement aElement = nextElement.findElement(By.tagName("a"));
            WebElement contentElement = edgeDriver.findElement(By.className("content-div"));
            List<WebElement> pList = contentElement.findElements(By.tagName("p"));
            //有点奇怪 没有id属性会返回 “” 没有href属性会返回null
            String idValue = aElement.getAttribute("id");
            String hrefValue = aElement.getAttribute("href");//如果没有该属性会返回null
            if (idValue.isEmpty()
                    && hrefValue != null) {
                //下一页
                for (int i=0;i<pList.size()-2;i++){
                    String ptext = pList.get(i).getText();//这个是ArrayList底层是数组支持随机访问
                    sb.append(ptext).append("\n");
                }
                //点击跳转下一页
                nextElement.click();
            } else{
                //下一章 或者 最后一章了
                for (int i=0;i<pList.size()-1;i++){
                    String ptext = pList.get(i).getText();
                    sb.append(ptext).append("\n");
                }
                break;
            }
        }
        // 清洗一下
        String result = sb.toString();
        return  result.replaceAll("「如章节缺失请退#出#阅#读#模#式」", "");

    }

    @Override
    public void close() {
        edgeDriver.quit();
    }

    public static void main(String[] args) {
        PageImpl8 pageImpl8 = new PageImpl8();
        String s = pageImpl8.get(new Chapter(1, " ", "http://m.wu62.org/qita/124460/55387582.html"));
        System.out.println(s);
    }
}
